import marimo

__generated_with = "0.13.7"
app = marimo.App(layout_file="layouts/data_preprocessing.slides.json")


@app.cell
def _():
    import marimo as mo
    return (mo,)


@app.cell
def _(mo):
    mo.md(
        r"""
    # 数据预处理
    python中常用的数据处理软件是pandas。
    """
    )
    return


@app.cell
def _(mo):
    mo.md(r"""## 读取数据集""")
    return


@app.cell
def _():
    import os

    os.makedirs(os.path.join('..', 'data'), exist_ok=True)
    data_file = os.path.join('..', 'data', 'house_tiny.csv')
    with open(data_file, 'w') as f:
        f.write('NumRooms,Alley,Price\n')  # 列名
        f.write('NA,Pave,127500\n')  # 每行表示一个数据样本
        f.write('2,NA,106000\n')
        f.write('4,NA,178100\n')
        f.write('NA,NA,140000\n')
    return (data_file,)


@app.cell
def _(data_file):
    import pandas as pd

    data = pd.read_csv(data_file)
    print(data)
    return data, pd


@app.cell
def _(mo):
    mo.md(r"""## 处理缺失值""")
    return


@app.cell
def _(data, pd):
    inputs, outputs = data.iloc[:, 0:2], data.iloc[:, 2]
    inputs = inputs.fillna(inputs.mean(numeric_only=True))
    print(inputs)
    inputs = pd.get_dummies(inputs,dummy_na=True)
    print(inputs)
    return inputs, outputs


@app.cell
def _(mo):
    mo.md(r"""## 转换为张量""")
    return


@app.cell
def _(inputs, outputs):
    import torch

    X = torch.tensor(inputs.to_numpy(dtype=float))
    y = torch.tensor(outputs.to_numpy(dtype=float))
    X,y
    return


@app.cell
def _(mo):
    mo.md(r"""## 练习""")
    return


@app.cell
def _(mo):
    mo.md(
        r"""
    创建包含更多行和列的原始数据集。

    1. 删除缺失值最多的列。
    """
    )
    return


@app.cell
def _(data):
    inputs1 = data.iloc[:,0:-1]
    inputs1.drop(inputs1.isna().sum().idxmax(),axis = 1)
    return


@app.cell
def _(mo):
    mo.md(r"""2. 将预处理后的数据集转换为张量格式。""")
    return


@app.cell
def _():
    return


if __name__ == "__main__":
    app.run()
